from flask import Flask
import pymysql
from apps.book import bp as book_bp
from apps.course import bp as course_bp
from exts import db
from flask_migrate import Migrate
import config
from models import User,UserExtension,Article


app=Flask(__name__)

#配置数据库相关
app.config.from_object(config)
#把app绑定到db上
db.init_app(app)

#使用下面两句进行映射表不太方面，一般使用flask-mirage,放在这主要用来迁移表
migrate=Migrate(app,db)#对象

#暂时还没有讲到ORM迁移数据库的版本管理，所以先删除所有表，再创建
#db.drop_all()
##将ORM模型转为数据库里面的表，执行下面的命令
#
#db.create_all()#会自动在数据库当中创建一个表






#测试一对一

@app.route('/oto')

def one_to_one():
    #由于上面每次写完都把删掉，所以直接创建
#    user=User.query.filter_by(id=1).first()
    user=User(username='mql')
    extension=UserExtension(school='清华大学')
    user.extension=extension
    db.session.add(user)
    db.session.commit()
    return 'one_to_one数据操作成功'





#测试,一对多
@app.route("/otm")
def one_to_many():
    article=Article(title='111',content='xxx')
    user=User(username='mql')
    article.author=user
    db.session.add(article)
    db.session.commit()
    return "one_to_many数据操作成功"




'''
使用migrate进行迁移，需在终端执行以下命令：
flask db init---初始化
flask db migrate -m +"自定义脚本名称"-----生成迁移脚本
flask db upgrade  ---最终命令
'''



##t添加数据
@app.route('/list')

def article_view():
    #1.添加数据
    #2.一般使用的语句是 insert table aritcle values(XX)
#    aticle=Article(title="钢铁是怎么炼成的",content="XXX")
#    #添加进去
#    db.session.add(aticle)
#    #提交
#    db.session.commit()
#    
    #查找数据
#    asbh=Article.query.filter_by(id=1)[0]
#    print(asbh.title)
    
    #修改数据
#    asbh=Article.query.filter_by(id=1)[0]
#    asbh.content='yyy'
#    db.session.commit()
    
    #删除数据---delete
    asbh=Article.query.filter_by(id=1).delete()
    db.session.commit()
    
    return '操作成功'


#验证---运行后出现1即为连接成功
@app.route('/')
def mql():
    engine=db.get_engine()#引擎
    
    with engine.connect() as cnn:
        result=cnn.execute('select 1')
        print(result.fetchone())
    return '图书列表'




#配置蓝图
#app.register_blueprint(book_bp)
#app.register_blueprint(course_bp)

if __name__=='__main__':
    app.run(debug=True)